Gradient descent
Gradient descent (pol. spadek gradientowy) – metoda iteracyjna wykorzystywana w optymalizacji numerycznej do znajdowania minima (lub maksima) funkcji różniczkowalnych. Algorytm opiera się na pochodnej (dokładniej na gradientzie) i polega na kolejnych krokach w kierunku przeciwnym do wektora gradientu, czyli w stronę największego spadku wartości funkcji.
Historia
Idea minimalizacji przy użyciu pochodnych sięga XIX wieku, jednak w swojej współczesnej postaci metoda spadku gradientowego została spopularyzowana w latach 1950–1960 w kontekście uczenia maszynowego i statystyki. Jednym z pierwszych opisów jest praca R. A. Fletchera i M. J. D. Powella z 1961 roku, a później metodę rozwijano w ramach sztucznej inteligencji i sieci neuronowych.
Podstawowy algorytm
Niech J(θ) będzie funkcją kosztu zależną od wektora parametrów θ. Algorytm spadku gradientowego w najprostszej formie wygląda następująco:
1. Wybierz początkowy wektor parametrów θ₀ oraz krok uczenia α > 0. 2. Dla k = 0, 1, 2, … wykonuj: a) Oblicz gradient: gₖ = ∇J(θₖ) b) Zaktualizuj parametr: θₖ₊₁ = θₖ – α·gₖ c) Zatrzymaj, gdy ||gₖ|| < ε lub po określonej liczbie iteracji.
W praktyce α (nazywany krokiem uczenia) musi być dobrany tak, aby zapewnić zbieżność, ale nie spowolnić procesu.
Warianty
W zależności od sposobu obliczania gradientu i aktualizacji parametrów wyróżnia się kilka popularnych wariantów:
- Batch gradient descent – gradient jest obliczany na całym zbiorze danych; gwarantuje najstabilniejsze zbieżności, ale jest kosztowny przy dużych zbiorach.
- Stochastic gradient descent (SGD) – gradient jest przybliżany na podstawie pojedynczego przykładu; pozwala na szybką aktualizację i jest szeroko stosowany w uczeniu maszynowym.
- Mini-batch gradient descent – kompromis między batch a SGD; gradient jest szacowany na małych podzbiorach (np. 32–256 przykładów).
- Momentum – do aktualizacji dodaje się składnik zależny od poprzednich kierunków, co przyspiesza poruszanie się po płaszczyznach o małym nachyleniu.
- Nesterov accelerated gradient (NAG) – modyfikacja momentum wykorzystująca „przewidywanie” położenia przed obliczeniem gradientu.
- Adam – adaptacyjny algorytm łączący zalety momentum i skalowania kroku uczenia dla każdego parametru osobno.
Zbieżność i problemy
Metoda spadku gradientowego nie zawsze prowadzi do globalnego minimum. Występują:
- Minimum lokalne – szczególnie w problemach nieliniowych.
- Plateau – obszary o bardzo małym gradiencie, które mogą wydłużać czas trenowania.
- Oscylacje – przy zbyt dużym α algorytm może przeskakiwać przez minimum.
Rozwiązaniem jest m.in. stosowanie strategii zmiany kroku uczenia (schedule), wymienionych wyżej wariantów oraz technik regularizacji.
Przykłady zastosowań
Gradient descent znajduje zastosowanie w wielu dziedzinach:
- Regresja liniowa i jej rozszerzenia.
- Sieci neuronowe, w tym głębokie uczenie głębokie.
- Optymalizacja parametrów w modelach bayesowskich.
- Rozwiązywanie równań różniczkowych metodą gradientu.
- Problem klasteryzacji (np. k‑means, gdzie aktualizacja centrów jest analogiczna do spadku gradientowego).
Implementacja
W językach programowania najczęściej spotyka się gotowe funkcje, np. w Pythonie – biblioteka TensorFlow lub PyTorch. Podstawowy kod w pseudo‑języku wygląda tak:
θ = inicjalizacja()
dla epoki w 1..N:
gradient = oblicz_gradient(J, θ)
θ = θ - α * gradient
Powiązane pojęcia
Więcej informacji można znaleźć w artykułach: gradient, pochodna, krok uczenia, zbieżność, regularizacja, uczenie maszynowe, statystyka.